✅画像の高さをheightではなくfont-sizeで指定する (code2svg)
from code2svg
変更点
padding: 1emを削除した
隙間がなくなった
隙間入りは、header optionsを実装するときにつけるつもり
line-heightを行の高さ計算で考慮する
サイズ指定の破壊的変更
今まで
heightとwidthを手動で設定する
はみ出さずかつ余白ができないよう、ちょうどよい値を探る必要があった
ぬくもりあふれる職人芸(白目)takker.icon
今回の変更
fontSizeを新設
font-sizeをまず決めて、それをもとにheightとwidthを計算するようにした
defaultでfont-size: 1emになる
何も設定せずとも高さ方向に余白を出さずに表示できる
幅方向は一文字あたりfont-size * 0.55くらいの幅をとると計算して設定している
こちらは場合によってははみ出る可能性があるため、widthで別途指定できるようにした
heightは削除した
blanksを新設
行が折り返されてしまうと、一部表示領域からはみ出してしまう
はみ出した行を表示させるために、手動で追加の余白をblanksで設定できるようにした
追加で確保したい領域を、行数で指定する
<body>と<head>を消し去った
不要だったので
<style>を<svg>の直下に移動した
ForeignObjectの背景色を塗ることで、余計な余白に色が付く
余計な余白があるかどうかを確かめられる
Firefoxでは無効のようだ
2023-02-19
20:10:39 表示テスト終了
問題なさそう。releaseする
https://code2svg-nduigq38h-takker99.vercel.app/svg/https://raw.githubusercontent.com/takker99/code2svg/main/api/main.ts#.svg https://code2svg-nduigq38h-takker99.vercel.app/svg/L30-40,width=30ch,blanks=5/https://raw.githubusercontent.com/takker99/code2svg/main/api/main.ts#.svg
https://code2svg-nduigq38h-takker99.vercel.app/svg/fontSize=0.5em,blanks=7/https://raw.githubusercontent.com/takker99/aa2svg/main/vercel.json#.svg
https://code2svg-nduigq38h-takker99.vercel.app/svg/https://raw.githubusercontent.com/takker99/aa2svg/main/vercel.json#.svg
https://code2svg-nduigq38h-takker99.vercel.app/svg/width=10em,blanks=10/https://raw.githubusercontent.com/takker99/aa2svg/main/vercel.json#.svg
16:37:00 方針が固まった
heightからfont-sizeを計算する
heightが指定されなかった場合は、font-size: 16pxとして計算する
行の折り返しがあった場合が厄介
↓の理由から、折り返された行数を正確に計算できない
表示領域に確保する行数を指定できるようにすればいい?
chromium系だと最小フォントサイズのせいで任意のheightを指定できない
font-sizeを指定させることにする
widthは
font-sizeからfontの幅を計算するのが困難
font-size * 0.6のように当たりをつけても、微妙にズレが生じる
一応、既定値はfont-size * 0.6の文字列がぴったり収まる幅にする
ch (単位)が使えたら良かったのだが、firefoxが対応していないので断念
firefox
https://gyazo.com/d52ab44d9493a232a020630f5685eb1c
chrome
https://gyazo.com/24d78c4e6ffac6f6b29e9425002db3ea
そもそも<length> (SVG)の仕様ではchは非対応である
https://developer.mozilla.org/ja/docs/Web/SVG/Content_type#length_長さ
なぜかchが効いているchromiumのほうがおかしい
https://code2svg.vercel.app/svg/L3-12,width=6em,height=11em/https://raw.githubusercontent.com/takker99/code2svg/31de1a65c53db5f5e27675c0a593240e9092b5fe/src/parseParams.ts#.jpg
emでは正確な長さにならない?
ex (単位)ならいけるかも
https://code2svg.vercel.app/svg/L3-12,width=6ch,height=11ex/https://raw.githubusercontent.com/takker99/code2svg/31de1a65c53db5f5e27675c0a593240e9092b5fe/src/parseParams.ts#.jpg
11exです(強弁)
明らかにおかしいな……どこのfont sizeを参照しているのやら
おそらく埋め込み先サイトのfont sizeを参照していると思われる
内部のCSSにfont-size: inheritを注入するか?
ForeignObjectの配置方法を調べたい
https://developer.mozilla.org/ja/docs/Web/SVG/Tutorial/Positions
https://helpfeel.com/daiiz/svgで画像に文字を入れる-5adaa0a284537100144fb053
svg要素の基本的な使い方まとめhttp://defghi1977.html.xdomain.jp/tech/svgMemo/svgMemo_13.htm
https://svg-hosting.vercel.app/api/svg?url=https://scrapbox.io/api/code/takker/✅画像の高さをheightではなくfont-sizeで指定する_(code2svg)/position.svg
微妙に重なっている
line-heightでは文字の高さと要素の高さを合わせられない?
/mrsekut-p/font-size
いや、これでいいっぽいな
微妙にずれているのはbaselineの関係
code:position.svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" width="100" height="100">
<foreignObject width="100%" height="100%">
<html xmlns="http://www.w3.org/1999/xhtml">
<style>
body { margin:unset; padding: unset; }
div { background: gray; color: black; font-size: 50px; /*height: 50px;*/ line-height: 1.0; }
</style>
<body>
<div>1行目</div>
<div>2行目</div>
<div>3行目</div>
<div>4行目</div>
</body>
</html>
</foreignObject>
</svg>
#2023-02-19 19:06:45
#2023-02-18 22:08:27